package com.solution.common.service.impl;

import java.util.List;
import java.util.Map;

import org.springframework.transaction.annotation.Transactional;

import com.solution.common.dao.BaseDao;
import com.solution.common.entity.BaseEntity;
import com.solution.common.page.PageBean;
import com.solution.common.page.PageParam;
import com.solution.common.service.BaseService;


/**
 * 基类Biz接口实现类
 * @author llp
 */
public abstract class BaseServiceImpl<T extends BaseEntity> implements BaseService<T> {

	protected abstract BaseDao<T> getDao();

	/**
	 * 插入单条记录
	 */
	public long create(T entity) {
		return getDao().insert(entity);
	}

	/**
	 * 批量插入多条记录
	 */
	public int create(List<T> list) {
		return getDao().insert(list);
	}

	/**
	 * 更新单条记录
	 */
	public int update(T entity) {
		return getDao().update(entity);
	}

	/**
	 * 更新多条记录
	 * 多条更新由于是循环实现的单条更新，所以需要保证事务
	 */
	public int update(List<T> list) {
		return getDao().update(list);
	}

	/**
	 * 查询单条记录
	 */
	public T getById(long id) {
		return this.getDao().getById(id);
	}

	/**
	 * 删除单条记录
	 */
	public int deleteById(long id) {
		return this.getDao().deleteById(id);
	}

	/**
	 * 分页查询 .
	 * @param pageParam
	 *            分页参数.
	 * @param paramMap
	 *            业务条件查询参数.
	 * @return
	 */
	public PageBean listPage(PageParam pageParam, Map<String, Object> paramMap) {
		return this.getDao().listPage(pageParam, paramMap);
	}

	/**
	 * 指定sqlId进行分页查询
	 */
	public PageBean listPage(PageParam pageParam, Map<String, Object> paramMap, String sqlId, String countSqlId) {
		return this.getDao().listPage(pageParam, paramMap, sqlId, countSqlId);
	}

	/**
	 * 查询多条记录
	 * @param paramMap
	 * @return 返回集合
	 */
	public List<T> listBy(Map<String, Object> paramMap) {
		return this.getDao().listBy(paramMap);
	}

	/**
	 * 指定sqlId查询多条记录
	 */
	public List<Object> listBy(Map<String, Object> paramMap, String sqlId) {
		return this.getDao().listBy(paramMap, sqlId);
	}

	/**
	 * 根据条件查询 listBy
	 * @param paramMap
	 * @return 返回实体
	 */
	public T getBy(Map<String, Object> paramMap) {
		return this.getDao().getBy(paramMap);
	}

	/**
	 * 指定sqlId查询单个对象
	 */
	public T getBy(Map<String, Object> paramMap, String sqlId) {
		return this.getDao().getBy(paramMap, sqlId);
	}
}
